home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Software Vault: The Gold Collection
/
Software Vault - The Gold Collection (American Databankers) (1993).ISO
/
cdr26
/
netprog.zip
/
NETPROG.TAR
/
asyncio
/
aiocat.c
next >
Wrap
C/C++ Source or Header
|
1989-12-17
|
1KB
|
58 lines
/*
* Copy standard input to standard output, using asynchronous I/O.
*/
#include <signal.h>
#include <fcntl.h>
#define BUFFSIZE 4096
int sigflag;
main()
{
int n;
char buff[BUFFSIZE];
int sigio_func();
signal(SIGIO, sigio_func);
if (fcntl(0, F_SETOWN, getpid()) < 0)
err_sys("F_SETOWN error");
if (fcntl(0, F_SETFL, FASYNC) < 0)
err_sys("F_SETFL FASYNC error");
for ( ; ; ) {
sigblock(sigmask(SIGIO));
while (sigflag == 0)
sigpause(0); /* wait for a signal */
/*
* We're here if (sigflag != 0). Also, we know that the
* SIGIO signal is currently blocked.
*/
if ( (n = read(0, buff, BUFFSIZE)) > 0) {
if (write(1, buff, n) != n)
err_sys("write error");
} else if (n < 0)
err_sys("read error");
else if (n == 0)
exit(0); /* EOF */
sigflag = 0; /* turn off our flag */
sigsetmask(0); /* and reenable signals */
}
}
int
sigio_func()
{
sigflag = 1; /* just set flag and return */
/* the 4.3BSD signal facilities leave this handler enabled
for any further SIGIO signals. */
}